package com.sc.nft.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sc.nft.dto.PayOrderPageDTO;
import com.sc.nft.entity.PayOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import com.sc.nft.entity.dto.TripartitePayRefundListDTO;
import com.sc.nft.entity.vo.PayOrderVO;
import com.sc.nft.enums.PayChannelEnum;
import com.sc.nft.enums.PayMethodEnum;
import com.sc.nft.enums.PayStatusEnum;
import com.sc.nft.enums.PayTypeEnum;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 支付轨迹表(sc_pay_order)数据Mapper
 *
 * @author kancy
 * @description 由 Mybatisplus Code Generator 创建
 * @since 2022-06-15 01:50:45
 */
@Mapper
public interface PayOrderMapper extends BaseMapper<PayOrder> {

    /**
     * 获取银行卡支付总额(不包含当天)
     *
     * @return
     */
    BigDecimal getSumPayAmount();

    /**
     * 昨日银行卡付款总额
     *
     * @return
     */
    BigDecimal getToSumPayAmount();

    BigDecimal getToSumPayAmountByDay(@Param("day") String day);

    /**
     * 获取用户支付总额
     *
     * @param userId
     * @return
     */
    BigDecimal getPayAmount(@Param("userId") Long userId);
    int payUserCount(@Param("startTime") Date startTime,@Param("endTime") Date endTime);
    /**
     * 支付轨迹表分页
     *
     * @param orderNo      订单编号
     * @param tradeNo      交易订单号
     * @param userTel      手机号
     * @param payType      支付类方式
     * @param channel      支付渠道
     * @param orderType    订单类型
     * @param bankCardNo   银行卡号
     * @param status       状态
     * @param startPayTime 开始支付时间
     * @param endPayTime   结束支付时间
     * @param page
     * @return
     */
    Page<PayOrderPageDTO> payOrderPageFromAdmin(Page page, @Param("orderNo") String orderNo,
                                                @Param("tradeNo") String tradeNo,
                                                @Param("userTel") String userTel,
                                                @Param("payType") PayMethodEnum payType,
                                                @Param("channel") PayChannelEnum channel,
                                                @Param("orderType") PayTypeEnum orderType,
                                                @Param("bankCardNo") String bankCardNo,
                                                @Param("status") PayStatusEnum status,
                                                @Param("startPayTime") Date startPayTime,
                                                @Param("endPayTime") Date endPayTime
    );

    /**
     *
     * @param tripartitePayRefundListDTO
     * @return
     */
    List<PayOrderVO> tripartitePayRefundList(@Param("tripartitePayRefundListDTO") TripartitePayRefundListDTO tripartitePayRefundListDTO);

    /**
     * 获取国库入金
     * @param userId
     * @param startTime
     * @param endTime
     * @return
     */
    BigDecimal getNationalTreasuryEnterMoney(@Param("userId") Long userId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
}
